A partir de los datos sacados de la web ExploitDB y de Twitter vamos a realizar un anĂ¡lisis para responder las siguientes preguntas:
El proyecto estĂ¡ compuesto por el proyecto principal, el cual llama a diferentes funciones para realizar y mostrar la correlaciĂ³n de los datos en el cual se basa este estudio, y un package, Ă©ste proporciona las funciones comentadas anteriormente, asi como su implementaciĂ³n y la obtenciĂ³n de los datos.
A continuaciĂ³n se exponen los resultados obtenidos de ExploitDB y se hace una comparativa de los exploits y vulnerabiliadades de los Ăºltimos 7 dĂas con los obtenidos a partir del 2000. El objetivo es contrastar si los datos de los Ăºltimos 7 dĂas se pueden considerar una buena muestra.
DespuĂ©s de la comparativa, se correlarĂ¡n los exploits con los tweets de alrededor del mundo de la Ăºltima semana. Se ha escogido este perĂodo de tiempo debido a que la API de Twitter estĂ limitada.
Por Ăºltimo, se sacan unas conclusiones para determinar si con los datos obtenidos y el estudio realizado ha sido suficiente para responder las preguntas planteadas.
Nos nutrimos a base de un repositorio de Github. Éste pone a disposiciĂ³n de cualquier usuario un archivo csv con mĂ¡s de 37000 vulnerabilidades, que ademĂ¡s es actualizado a diario. Cada vulnerabilidad nos proporciona informaciĂ³n relevante como la id del exploit correspondiente en exploitDB, una descripciĂ³n, la fecha de agregaciĂ³n a exploitDB, el autor, la plataforma a la cual afecta, el tipo de vulnerabilidad y una descripciĂ³n mas especĂfica de este.
Obtenemos el fichero CSV mediante la funciĂ³n:
get_exploitdb_All <- function() {
csv <- RCurl::getURL("https://raw.githubusercontent.com/offensive-security/exploit-database/master/files.csv")
db <- read.csv(text = csv,stringsAsFactors = F)
return(db)
}
Si se analizan las dos grĂ¡ficas, se puede observar claramente que con mucha diferencia las plataformas de PHP y Windows son las que mas exploits tienen. No obstante, los datos obtenidos de la Ăºltima semana no es asĂ. Aunque sigue predominando Windows, muy empatado con los otros sistemas operativos Linux i OS X, PHP no tiene tanto peso.
Por lo tanto, cuando se haga la correlaciĂ³n se debe tener en cuenta que las plataformas con las que se ha cruzado la informaciĂ³n con Twitter, no se pueden considerar como un resultado absoluto, no se deberĂa generalizar.
A continuaciĂ³n podemos ver la actividad que ha havido en twitter en las Ăºltimas 24 horas de las plataformas mĂ¡s susceptibles a ataques
En el caso de los exploits se ha visto que puede varĂar mucho entre semanas debido a que muchas veces los tipos vienen en bloque. Es decir, dada una vulnerabilidad pueden salir exploits diferentes pero del mismo tipo. Por lo tanto, no se deberĂa generalizar.
Cada uno de los tipos de exploits especificados en el apartado anterior tiene una descripciĂ³n mĂ¡s especĂfica del la vulnerabilidad en cuestiĂ³n. En este caso, es muy probable que los resultados sean diferentes entre si y por eso en la grĂ¡fica salen porcentages tan iguales. Como dato curioso, SQL injection Ă©s el tipo de vulnerabilidad mas exploitada en los Ăºltimos 20 años.
La api de twitter nos proporciona la informaciĂ³n necesaria para el estudio que queremos realizar. Para ello obtenemos un json al mandar una query contra la api. Al obtener el json parseamos su contenido y con ello obtenemos un dataframe con los datos que utilizaremos como el nombre de usuario, la ubicaciĂ³n del usuario, la coordenadas geogrĂ¡ficas, el texto publicado y la hora de la publicaciĂ³n.
#Obté dataframe amb exploits (tota la info)
exploitsDB <- SoCoTools::get_exploitdb(7)
# Obté la data dels exploits
date <- paste(exploitsDB$date, sep=" ")
#n <- vapply(strsplit(tweet_search[2], "\\W+"), length, integer(1))
# ObtenciĂ³ del que s'ha de buscar
tweet_search <- paste(exploitsDB$platform, exploitsDB$type ,exploitsDB$subtype, sep=" ")
tweet_search <- gsub("[^[:alnum:][:blank:]+?&/\\-]", "", tweet_search)
tweet_search <- gsub("[0-9]+","",tweet_search)
tweet_search <- sub("/", " ",tweet_search)
tweet_search <- sub(" ", "",tweet_search)
# En aquest punt tweet_search contĂ© tots els valors a buscar sense carĂ cters especials i nĂºmeros
# Si es vol busccar per hashtags executar les segĂ¼ents comandes
tweet_search <- gsub(" ", " #", tweet_search)
tweet_search <- paste("#", tweet_search, sep="")